﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Text;
using System.Globalization;
using MySql.Data.MySqlClient;



namespace WcfService4
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    // NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
    public class Service1 : IService1
    {

        public Service1()
        {
             string conexaoString = "server=localhost;User Id=root;database=TudoNovelas";
            MySqlConnection conexao = new MySqlConnection(conexaoString);
            conexao.Open();
        }

        //metodo para dividir o html em linhas
        public List<string> htmlParser(string texto)
        {
            List<string> textParsed = new List<string>();
            int indice = texto.IndexOf("\n");
            while (indice != -1)
            {
                textParsed.Add(texto.Substring(0, indice));
                texto = texto.Substring(indice + 1);
                indice = texto.IndexOf("\n");
            }
            return textParsed;
        }

        public static string getDiasPosteriores(int dias)
        {
            DateTime data = DateTime.Now;
            DateTime diaProxCapitulo = DateTime.Now;
            List<string> diaDaSemana = new List<string> { "domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado" };
            List<string> meses = new List<string> { "janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro" };

            diaProxCapitulo = data.AddDays(dias);

            if ((int)diaProxCapitulo.DayOfWeek == 0)
            {
                diaProxCapitulo = diaProxCapitulo.AddDays(1);
            }

            string diaRetorno = diaProxCapitulo.Day.ToString();

            if (Convert.ToInt32(diaRetorno) < 10)
            {
                diaRetorno = "0" + diaRetorno;
            }

            string diaCompletoRetorno = diaDaSemana[(int)diaProxCapitulo.DayOfWeek] + ", " + diaRetorno + " de " + meses[diaProxCapitulo.Month - 1];
            return diaCompletoRetorno;

        }

        public string getDiasSemana()
        {
            string saida = "";
            DateTime data = DateTime.Now;
            DateTime diaProxCapitulo = DateTime.Now;

            List<string> takeWeekDaysCompleto = new List<string>();
            int indiceDia = (int)data.DayOfWeek;
            int indiceLoop = 0;
            int indiceAux = 1 - indiceDia;
            while (indiceLoop < 5)
            {
                takeWeekDaysCompleto.Add(getDiasPosteriores(indiceAux));
                indiceAux++;
                indiceLoop++;
            }
            for (int i = 0; i < takeWeekDaysCompleto.Count; i++)
            {
                saida = saida + takeWeekDaysCompleto.ElementAt(i) + "/";
            }
            return saida.Substring(0, saida.Length - 1);
            //return takeWeekDaysCompleto;            

        }

        public string getNovelsName()
        {
            string saida = "";
            System.Net.WebClient c = new System.Net.WebClient();
            c.Encoding = System.Text.Encoding.UTF8;
            string text = c.DownloadString("http://novelas.redenoticia.com.br/category/novelas/atual");
            List<string> listaTexto = htmlParser(text);
            List<string> novelasAtuais = new List<string>();

            foreach (string linha in listaTexto)
            {
                if (linha.IndexOf("</a><p>") != -1)
                {
                    string linhaProcurada = linha.Substring(linha.IndexOf("</a><p>"));

                    if (linhaProcurada.IndexOf(":") < 50)
                    {
                        linhaProcurada = linhaProcurada.Substring(7, linhaProcurada.IndexOf(":") - 7);
                    }
                    else
                    {
                        linhaProcurada = linhaProcurada.Substring(7, linhaProcurada.IndexOf("–") - 8);
                    }
                    linhaProcurada = linhaProcurada.Replace("Novela ", "");

                    novelasAtuais.Add(linhaProcurada);
                }
            }



            for (int i = 0; i < novelasAtuais.Count; i++)
            {
                saida = saida + novelasAtuais.ElementAt(i) + "/";
            }
            saida = saida.Substring(0, saida.Length - 1);
            return saida;
        }


        //metodo para deixar o nome sem acentos(incluindo ~ e "ç") e todo minúsculo
        public string ajeitaNome(string text)
        {
            text = text.ToLower();
            text = text.Replace(" ", "-");
            StringBuilder sbReturn = new StringBuilder();
            var arrayText = text.Normalize(NormalizationForm.FormD).ToCharArray();

            foreach (char letter in arrayText)
            {
                if (CharUnicodeInfo.GetUnicodeCategory(letter) != UnicodeCategory.NonSpacingMark)
                    sbReturn.Append(letter);
            }
            return sbReturn.ToString();
        }

        //pega o resumo do capitulo pela data
        public string takeNovelResume(string nomeNovela, string Data)
        {
            nomeNovela = ajeitaNome(nomeNovela);
            string text = openHtmlSite(1, nomeNovela);


            List<string> listaTexto = htmlParser(text);
            foreach (string linha in listaTexto)
            {
                if (linha.IndexOf(Data) != -1)
                {

                    string linhaProcurada = linha.Substring(linha.IndexOf(Data));
                    if (linhaProcurada.Length < 140)
                    {
                        continue;
                    }

                    linhaProcurada = linhaProcurada.Substring(0, linhaProcurada.IndexOf("<"));
                    if (linhaProcurada.IndexOf("&#8211;") != -1)
                    {
                        linhaProcurada = linhaProcurada.Replace("&#8211;", "");
                    }
                    return linhaProcurada;
                }
            }
            return "informacao não encontrada";
        }


        // carrega o html do site
        public string openHtmlSite(int tipoSite, string nomeNovela)
        {
            System.Net.WebClient c = new System.Net.WebClient();
            c.Encoding = System.Text.Encoding.UTF8;
            string text = "";
            if (tipoSite == 1)
            {
                try
                {
                    text = c.DownloadString("http://novelas.redenoticia.com.br/" + nomeNovela + "-resumo-dos-proximos-capitulos-da-novela");

                }
                catch
                {

                    return openHtmlSite(2, nomeNovela);
                }

            }
            if (tipoSite == 2)
            {
                try
                {
                    text = c.DownloadString("http://novelas.redenoticia.com.br/resumo-dos-proximos-capitulos-da-novela-" + "-" + nomeNovela);

                }
                catch
                {

                    return openHtmlSite(3, nomeNovela);
                }

            }
            if (tipoSite == 3)
            {
                try
                {
                    text = c.DownloadString("http://novelas.redenoticia.com.br/novela-" + nomeNovela + "-resumo-dos-proximos-capitulos");

                }
                catch
                {

                    return text = "informacao não obtida";
                }

            }
            return text;

        }

    }
}
